home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48hor2
/
qed.doc
< prev
next >
Wrap
Text File
|
1995-03-31
|
39KB
|
898 lines
(Comp.sources.hp48)
Item: 34 by lkv at mania.hotb.sub.org
Author: [Lutz Vieweg]
Subj: v03i010: qed - Machine Code Editor v1.07 [the REAL v1.07]
Date: Tue Jan 07 1992
[Note: It says "machine code editor" above, but QED doesn't edit machine code;
it's an object editor (like the built-in EDIT) written completely in very fast
machine code (unlike EDIT, which is written in slow RPL). The documentation
below, at the author's request, is unretouched. I hope that any possible
unclarities do not prevent you from trying out this impresive editor.
Note #2: Pressing ON does not exit. The "panic button" is shift-ENTER.
Like WordPerfect, this is a very powerful, very fast, and totally non-obvious
program that uses arcane keystroke sequences that must be learned, or you
can customize its keyboard with macros to your own taste. It's worth the
effort to learn the contents of the following documentation! -jkh-]
Hi!
I was very surprised when I heard that QED 1.06 seemed to crash when
some libraries were installed. The reason for this is simple, but it is
not that easy to solve the problem. QED really needs absolute adresses
in RAM. But since it is no longer self-modifying, as it has been in
version 1.05, I needed to find a save location were to put the internal
variables. QED uses the PICT memory, which I guessed to reside in the
same place any time. But there are some libraries that moves the PICT
memory to a higher location - in general a few bytes only, but this
caused nasty crashes. The solution is not that elegant, but I think it
will prevent further trouble: QED uses now the highest possible
memory-range, and it checks wether this range is occupied by PICT or
not. So I managed to make QED work with all the libraries I tried - and
I hope it will not crash anymore...
cu, Lutz Vieweg
PLEASE READ THE QED.TXT FILE ENTIRELY!
Included in this package:
QED.DIR a binary file (directory object) to be transmitted to the
HP48sx, containing all QED related variables and programs
(e.g. 3 different fonts)
QEDSMALL.DIR a binary file (directory object) to be transmitted to the
HP48sx, containing only the 4 neccessary variables QED.o
QED.font QED.env QED.keys - download this one for a first
test...
QED.DOC QED's manual. If you are updating from a former release,
please take a look at the "version history" in this
manual.
FONTSRC.COM A self-extracting archive containing the source code for
the fonts. [Copy to another disk before running FONTSRC;
the Goodies Disk is too full to run it in place. -jkh-]
* ATTENTION: READ THE COPYRIGHT-NOTICE IF YOU HAVE *
* AN UNLICENSED EVALUATION COPY *
+----------------------------------------------------+
| Last changes made on 09-11-91 V 1.07 |
| |
| ###### ####### ####### |
| # # # # # # The mega-speed |
| # # # # # machinecode |
| # # ##### # # HP48sx Editor |
| # # # # # # |
| # # # # # # # (C)1991 Lutz Vieweg |
| ###### ####### ####### |
| # |
+----------------- Manual -----------------------+
Please do not start QED until having read the whole manual.
0.0 Scusi...
------------
Please excuse linguistic mistakes in this text. English is not
my native language. If you are not great at english, enjoy the
easy words that are used, if your native language is english,
think of what would be if you had to translate this text from
german...
0.1 The Project
---------------
When I bought my HP48sx it took only a few days to make me realize
how slow an operating-system can get if you spend no time on
optimizing time-critical routines. My feelings about this turned
from bad to ugly when I tried to edit larger programs or even
simple strings. I think it is a shame how the calculator makes
you wait just for scrolling a listing one line up.
Before I bought the 48sx, I saw machine-language programmability
as a nice feature for a hand-held calculator - but later I knew
it is just neccessary.
QED is my first large assembler-only project on the 48sx. I had
to program an assembler and disassembler before I felt able to
begin. By the time, CLASS and CLDIS raised their version number
rapidly due to the demands I encountered while programming QED.
QED is ment to substitute HP's internal editor and to make editing
a lot more comfortable.
0.2 Copyright Notice
--------------------
QED was written by Lutz Vieweg 1991.
QED is "ShareWare" - you may spread the unlicensed evalution version
to anyone as long as you...
- do not change any bit of the main program or documentation
- do not take money for it
- copy the whole package (all the files and documentation)
You may use the unlicensed evaluation copy as long as you wish, but
it has one greater disadvantage:
It quits automatically after 3 minutes run-time
If you think that QED is worth a little bit of money to you, send
a letter with a ready adressed and stamped envelope plus a unique
price of only
DM 10,- or US$ 8,-
to my postal adress (see below). Add a 3.5' Disk or DM 1,- or US$ 1,-
and tell me wether I should format the disk MS-DOS/Atari- or Amiga-
conform. If you've got another computer, I can try to post
the program via EMail (FidoNet) or you may call me for a direct
serial transmission (HST, V32bis, V42bis).
You will then get a registered QED owner, I will send you a unique
version without the limitations of the unlicensed evaluation copy.
Whenever you see an update to QED coming around, you may send again
a letter as described above, but without the money (except for the
disk if neccessary), to me - you will get the lastest release.
If you think you've got not the right connections to be informed of
a new release, send a second self-adressed envelope to me, I will
send it then to you as soon as a new release appeares.
0.3 Some words about machine-language programs...
-------------------------------------------------
HP does not encourage the typical HP48sx-user to program his
calculator in machine language. This is done for some
reasons, but the most important one may be that the
typical user wants his 48sx to work properly each and
every time, and not to lose memory contents at all.
The operating system of your 48sx has been tested for
hours, days and years, especially because the greater
part of it has been used in former calculators as well.
You may hardly be able to "crash" your 48sx using
the documented instructions, but you can get into
serious trouble when you leave this "child-safe" area
and play e.g. with SYSEVAL or Code Objects.
I am not perfect, but I think I have the neccessary knowledge
to create well-working machine language programs on the
HP48sx. But I cannot guarantee that my programs never crash,
and therefore you have to use my programs at your own risk.
I did my best to write a bug-free program, but if it is
e.g. your financial ruin when you lose your memory contents,
you should think twice about using the product this
documentation is about.
I CANNOT GIVE ANY WARRANTIES FOR THIS PROGRAM EXCEPT THAT
I DID NOT INCLUDE A VIRUS IN IT.
I've tested QED with both a version A and version E 48sx.
It seems to work fine on both machines.
1.0 Installation
----------------
To setup QED in your HP48sx take the following steps:
- Transfer QED.dir to your hand-held using a KERMIT-program
for example [or QEDSMALL.dir for a test drive].
- Invoke QED.o and enjoy...
- Use KEYED to customize the keyboard usage of QED
- Edit QED.env to customize various settings of QED
QED needs a few variables to run properly: QED.font, QED.env and
QED.keys. If you want to use QED in any directory, simply copy
these variables plus the main program, QED.o to your HOME directory.
1.1 Keyboard customization
--------------------------
QED reacts on keys similar to the OS.
There are 45 "normal" keys, 2 "shifter" and the ALPHA key; the "ON" key
(wich is in fact just an interrupt button) is unused.
Every normal key can be pressed without a shifter or with one
of them switched on or held down. This calculates to 135 possible
different keystrokes. Do not press more than one shifter or normal
key the same time - it will not be detected.
The ALPHA key switches between normal and alpha-mode. A totally
independent key-list is held increasing the number of "different"
keys to 270. If you hold the ALPHA key down and then press
one or more keys, QED will return to the mode previously used
after releasing the ALPHA key.
NOTICE: There is a little hardware-fault in the HP48sx:
If you press the ALPHA key, the left shifter and
on of the following keys, a wrong result will occur:
"s", "7", "8", "9"
The operating system covers this error by simply not
allowing to press ALPHA and left shift together with
a another key.
There is a list of 300 strings (30 of them are unused) in the
normal HP48sx-format in a variable called 'QED.keys'. Each of
the 270 used strings tells QED how to react on a specific key-shifter
combination. Every byte except the ASCII code for "!" is treated
as a simple character which has to be set into the text. The
strings may consist of as many characters as you wish. E.g. if
you put "Gomorra" in the list as the string for the [EVAL] key,
you will see the 7 characters of this string put into the text
whenever you press the [EVAL] key.
The exclamation mark has a special meaning. Whenever QED encounters
an "!" it will enter a "command-mode" - it will try to interpret
what follows to define a specific function that will then be
executed. If QED needs more codes, the "busy"-announciator will
blink until enough keys have been pressed. Sometimes, a prompt
will ask for specific data.
Here are a few examples of the function codes:
"!" - Enter command mode. If nothing follows, the busy-
announciator will flash until enough codes have been
typed to specify a command.
"!!" - Set an exclamation mark into the text.
"!CL" - Move cursor left.
"!CR" - Move cursor left.
"!CU" - Move cursor up.
"!CD" - Move cursor down.
For a complete list see chapter "Command Key Codes".
You may combine normal characters and command key codes at will.
The most simple way to change 'QED.keys' is to invoke 'KEYED'
wich is included in the package. This program will ask you
to press the key you want to change and then for the string definition.
To leave KEYED, press the "EXIT" menu key when asked for a definition.
NOTICE: KEYED may sometimes "sleep" for a few seconds - be patient,
and think of HP's "garbage collection"
1.2 Setting up the environment variable
---------------------------------------
The environment variable is a list that consists of various object.
You may change this variable, called 'QED.env', with the "VISIT"
function of your calculator or any other proper way.
For a detailed description of the environment variable see chapter
"The Environtment Variable".
1.3 Using different character sets
----------------------------------
The variable QED.font holds the font used by QED, or the
name of another variable, that holds the font. This font
contains not only the character-bitmap but also information
about the size of the font.
Fonts may be of any size between 2*3 to 16*32 pixel.
I will copy any font I have to anyone who is interested; if
you demand a special set of characters just do-it-yourself:
The sources for the fonts are included in the archive you
should have received - simply edit & assemble them. If you
do not feel like working with an assembler, you may post me
the edited source and a stamped back-envelope; I'll do it
for you.
1.4 Invoking the Editor
-----------------------
To start QED place the object you wish to edit on the top of the
stack, then press the VAR-menu-key which represents QED.o .
Be sure to have 'QED.keys', 'QED.font' and 'QED.env' in the actual
directory or "above".
If QED quits with an "insufficient memory" error, you know what you
are lacking... :-)
If QED quits with an "undefined name" error, something with one
of the three variables (QED.env, QED.font, QED.keys) went wrong.
If you edit a string-object, the output of the editor will be also
a string. If you edit other than string objects, QED will use
the ->STR function to convert the object to a string
(this may last a while, even at larger objects).
When you have finished editing, QED will use the STR-> function
to convert the edited string back into an object, except if you
used the "!QT" instruction to leave QED.
1.4.1 Using a startup-macro
---------------------------
Especially when you wish to call QED from your own programs, you
may want to specify a string of command-key-codes to be executed
directly after invocation. You can do this by setting bit 3 of
the startup-flags (in the QED.env variable). QED checks if
there's a string in level 2, and if so, it is interpreted just
like a string in the QED.keys variable, but only once at the
start.
1.4.2 Keeping the menu
----------------------
You can tell QED to keep the menu actually displayed on the screen.
This is done by simply setting a bit in the environment variable.
Keeping the menu can be useful e.g. if you want to process the
edited variable depending on a return value.
If you do not know yet how to display a menu from a running program,
here is an example:
<< { "DO" "SOME" "THING" "DIFFERENT" } TMENU # 3A1FCh SYSEVAL QED.o >>
Notice: QED is just showing the same graphic at the menu-row as it was
before, there's no special behaviour of the "menu-keys". You
cannot directly call RPL-programs from the upper 6 keys as it
is possible while normal calculator usage!
- Look chapter 2.1 for the startup-flags
1.5 Leaving the Editor
----------------------
To leave the editor you may use one of the command-key-codes
described below.
NOTICE: You cannot cause an interrupt while QED is running.
This has two important consequences:
- Alarms will not occur during QED usage. They will
come up after leaving.
- Pressing the [ON] key, even together with others,
will have no effect at all
If, what heaven may prevent, your calculator "crashes"
and "hangs up", you will have to press the reset-button
of your calculator. You will find this button below
one of the rubber-feet on the backside of your 48sx;
use a needle or something like that to press down
the button through the little hole.
After pressing the reset-button, do the following:
Press ON (calculator switches on and warm-starts).
Press any key (calculator warm-starts again).
Transmit QED from your original package to your
calculator (NEVER run QED after a crash without
having re-transmitted it!).
QED quits automatically after no action has taken place for
the time specified in the QED.env variable. This is done
to save the batteries from being exhausted too far. If QED
is left this way, changes are made to the string in level 1.
The unlicensed evaluation copy of QED will quit after a total
of about 3 minutes after invocation.
1.5.1 The return-values
-----------------------
You can tell QED to leave a return-value on the stack, a real number
from 0 to 99. This instruction is ment to make it more easy to you
to use QED from other programs. If you want to get the return value 0
even if no command key code caused such a value to be returned, you
may set bit 6 of the startup-flags.
- Look chapter 2.0 for the command key codes and 2.1 for the startup-
flags.
You may also set a bit in the startup-flags to tell QED to leave the
last cursor position as a real-number on the stack.
1.6 QED as subroutine
---------------------
QED was definitively ment to become an often used sub-program as well
as a stand-alone editor. In the chapters above I discussed some
functions of QED that should give you the ability to use QED for
a large amount of tasks from your own programs. Here are some further
hints:
QED seems really a little bit memory-expensive, but you'll find that
there are so many tools gaining advantage from QED usage, you
won't regret holding QED in your HOME directory. It's a good idea
to have one standard set of QED variables also in your HOME directory.
Theese variables should be used to setup your favourite object editor.
Patches for built-in functions like "VISIT" should be able to
use this environment.
Other programs that want to use QED should have their own directory. In
this directory they can hold "their" environment. They can use the
same QED.o and QED.font from the HOME directory of course, but mostly
they will need their own QED.keys and QED.env variable.
To change your favourite key-assignment as little as possible when
using such programs, they should contain a setup-routine, that takes
your QED.keys from the HOME directory, change the neccessary keys
and write the new QED.keys to the subdirectory of the program.
This way may also save a lot of redundant bytes when spreading such
programs around...
2.0 Command key codes
---------------------
<.> has to be replaced by a string that is terminated with CHR$(0)
<x> has to be replaced by a hexadecimal value, terminated with CHR$(0)
"!" - Enter command mode. If nothing follows, the ALPHA-
announciator will flash until enough codes have been
typed to specify a command.
"!!" - Set an exclamation mark into the text.
"!#<x> - Print the hexadecimal defined ASCII code.
"!a<.> - Show alert with specified text.
"!A" - Shows some information about QED, e.g. the version number
"!B" - Backspace. Deletes the character to the left of the cursor
"!bS" - Set block start
"!bE" - Set block end
"!bC" - Copy block to actual position and to clip
"!bD" - Copy block to clip, then delete it
"!CL" - Move cursor left.
"!CR" - Move cursor right.
"!CU" - Move cursor up.
"!CD" - Move cursor down.
"!CB" - Move cursor to the beginning of the actual line
"!CE" - Move cursor to the end of the actual line
"!Cb" - Move cursor to the beginning of the text
"!Ce" - Move cursor to the end of the text
"!CW" - Move cursor to the beginning of the next word
"!Cw" - Move cursor to the end of the word
"!c" - Clear the whole text.
"!D" - Delete. Deletes the character under the cursor.
"!EN<.><.> - Normal search and replace (asks for Y/N/Q/G)
"!ET<.><.> - Turbo search and replace (Global by default)
"!F<.>"- Search for a specified text, move cursor to the found position
"!f" - Continue search
"!I1" - Import a text string from
... the specified stack level
"!I9" ("!I1" imports the original text that is actually edited)
"!j<x>"- Jump to specified location
"!J0" - Jump to one of the five marks
...
"!J4"
"!M0" - Set one of the five marks
...
"!M4"
"!O" - Switch overwrite/insert mode.
"!P<x>-" - Move the pointer in the command-key-code string back a
specified number of characters if status is OK.
Every command leaves a status bit to indicate it's
success or failure. Using this command you can create
loops in macro strings to execute a set of instructions
again if the status indicates no error. The status is
negative e.g. even if you tried to move the cursor up a line
and you were already in the first one. The offset <x>
is calculated from the character following the "!P".
Example: "!D!P4%-" A very stupid method to erase everything till
the end. ^This one stands for a CHR$(0)
IMPORTANT: You can move the pointer only within ONE string.
If you try to jump to a location that is not in
the actual string, funny things may happen, but
QED will not crash.
"!P<x>+" - This command will skip a specified number of characters
following the "+". Usage like previous one.
Example: "!PFFFF%+" will leave the actual command-key-code
string if OK. ^This one stands for a CHR$(0)
"!p<x>-" - Similar to the previous one, this instruction will move the
pointer in the actual command-key-code string. But it will
affect the pointer only if the status is not O.K.
"!p<x>+" - The same as the last one, but the new location is calculated
by adding the offset to the location after the "+"
"!QS" - Quit QED and place edited object on stack
"!QN" - Quit QED, but leave old object on stack (changes are lost!)
"!QN" works slightly faster than "!QS"
"!QT" - Quit QED, but do not compile the object if it has been
not a string object already.
"!R" - EndOfLine and indent as actual line
"!r00" - Return a real value (0 to 99) to the stack when quit.
... If this instruction is not used and also bit 6 of the
"!r99" startup-flags is unset, no value is passed.
"!S" - Show status page
"!s" - Toggle sound on/off (see QED.env for default value)
"!V" - Switch ViewMode/CursorMode. In ViewMode, the ALERT-
announciator is on. You may scroll around, but
you cannot change the text.
"!X<x>" - A simple format instruction. It will split lines larger
than the given right border. It does not remove any EOL.
Please be patient - this is not the fastest function.
"!Y" - Disable screen output ; These two commands can save you a lot
"!y" - Enable screen output ; of time when using more complex macros
; Here is a "delete line" macro for example: "!Y!CB!bS!CD!bE!bD!y"
; IMPORTANT: This function can be "nested". If you switch off
; the output by "!Y!Y" you will need "!y!y" to switch it on again.
"!Z" - Refresh screen
2.1 The Environment Variable
----------------------------
You may cut the following text and transmit it to the 48sx
as an ASCII-type file for 'QED.env'
%%HP: T(3)A(R)F(.);
{
@ type range function
@ binary #0-#FFFFFFFFh startup-flags:
@ Bit Value Function
@ 0 1h If set, ViewMode is selected from start
@ 1 2h If set, OverwriteMode is selected from start
@ 2 4h Set = Scroll hard in cursor mode; Clr = Scroll soft...
@ 3 8h If set, a startup-macro-string is taken from level 2
@ 4 10h If set, errors will cause alerts
@ 5 20h If set, sound is switched off by default
@ 6 40h If set, a return-value 0 is passed back by default
@ 7 80h If set, the menu actually displayed is kept on the screen
@ 8 100h If set, QED leaves the last cursor-position on the stack
If you set bit 6 and bit 8, two values will be passed.
#14h
@ type range function
@ binary #0-#FFFFFFFFh delay until key repeats first sec/8192
#5000d
@ type range function
@ binary #0-#FFFFFFFFh delay between key repeats sec/8192
#700d
@ type range function
@ binary #0-#FFFFFFFFh first repeat delay in view-mode sec/8192
#10d
@ type range function
@ binary #0-#FFFFFFFFh delay between key repeats in view-mode sec/8192
#10d
@ type range function
@ binary #0-#FFFFFFFFh time until auto-quit sec/8192
#2457600d
@ type range function
@ binary #0-#FFFFFFFFh cursor blinking-phase time (0=no blink) sec/8192
#4096d
@ type range function
@ binary #0-#FFh The left scroll-border
#3d
@ type range function
@ binary #1-#FFh The right scroll-border
#19d
}
2.2 Default key assignment
--------------------------
The 'QED.keys' file that is included in the package assigns the
keys as follows:
Without any shifter in normal mode
[!r1!QS] [!r2!QS] [!r3!QS] [!r4!QS] [!r5!QS] [!r6!QS]
[ !bS ] [ !bE ] [ !bC ] [ !bD ] [ !CU ] [ !F ]
[ ''!CL] [ STO ] [ EVAL ] [ !CL ] [ !CD ] [ !CR ]
[ !S ] [ ] [ ] [ !V ] [ ^ ] [ ]
[ !QS ] [ ] [ ] [ !D ] [ !B ]
[ ALPHA ] [ 7 ] [ 8 ] [ 9 ] [ / ]
[LFTSHIFT] [ 4 ] [ 5 ] [ 6 ] [ * ]
[RGTSHIFT] [ 1 ] [ 2 ] [ 3 ] [ - ]
[ 0 ] [ . ] [ SPACE ] [ + ]
With LEFT-SHIFT shifter pressed in normal mode
[ ] [ ] [ ] [ ] [ ] [ ]
[ !A ] [ ] [ !# ] [ !j ] [ ] [ !EN ]
[ ] [ ] [ !O ] [ ] [ ] [ ]
[ !s ] [ ] [ ] [ ] [ ] [ ]
[ !QN ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ()!CL ]
[ ] [ !J4 ] [ ] [ ] [ []!CL ]
[ ] [ !J1 ] [ !J2 ] [ !J3 ] [<<>>!CL ]
[ !J0 ] [ , ] [ ] [ {}!CL ]
With RIGHT-SHIFT shifter pressed in normal mode
[ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ !Ce ] [ !f ]
[ ] [ ] [ ] [ !CB ] [ !Cb ] [ !CE ]
[delta ] [INTEGR] [SUMME ] [ROOT ] [ ] [ ]
[ CHR$(0) ] [ ] [ ] [ ] [ ! ]
[ ] [ ] [ ] [ ] [ # ]
[ ] [ !M4 ] [ ] [ ] [ _ ]
[ ] [ !M1 ] [ !M2 ] [ !M3 ] [ ""!CL ]
[ !M0 ] [CHR$(10)] [ ] [ ::!CL ]
Without any shifter in alpha mode
[ A ] [ B ] [ C ] [ D ] [ E ] [ F ]
[ G ] [ H ] [ I ] [ J ] [ K ] [ L ]
[ M ] [ N ] [ O ] [ P ] [ Q ] [ R ]
[ S ] [ T ] [ U ] [ V ] [ W ] [ X ]
[ CHR$(10) ] [ Y ] [ Z ] [ DEL ] [BACKSP]
[ ALPHA ] [ 7 ] [ 8 ] [ 9 ] [ / ]
[LFTSHIFT] [ 4 ] [ 5 ] [ 6 ] [ * ]
[RGTSHIFT] [ 1 ] [ 2 ] [ 3 ] [ - ]
[ 0 ] [ . ] [ SPACE ] [ + ]
With LEFT-SHIFT shifter pressed in alpha mode
[ a ] [ b ] [ c ] [ d ] [ e ] [ f ]
[ g ] [ h ] [ i ] [ j ] [ k ] [ l ]
[ m ] [ n ] [ o ] [ p ] [ q ] [ r ]
[ s ] [ t ] [ u ] [ v ] [ w ] [ x ]
[ !R ] [ y ] [ z ] [ DEL ] [BACKSP]
[ ] [ ] [ ] [ ] [ ()!CL ]
[ ] [ ] [ ] [ ] [ []!CL ]
[ ] [ == ] [ < ] [ ] [<<>>!CL ]
[ = ] [ , ] [ PI ] [{}!CL ]
With RIGHT-SHIFT shifter pressed in alpha mode
[ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ] [ ]
[ CHR$(0) ] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ # ]
[ ] [ ] [ ] [ ] [ _ ]
[ ] [NOTEQUAL] [ > ] [ ] [ " ]
[ -> ] [CHR$(10)] [ ANGLE ] [ : ]
3.0 QED Utilities
-----------------
Together with the main program, you should have copied a few utilities
helping you to use QED. Here is a short description:
KEYED Takes the QED.keys variable from the actual directory
Leaves the changed key-list on the stack
KEYED let you customize the key-definitions for QED. If you
want to use the changed list, simply "STO"re it in your
QED.keys variable.
KEYED will ask you to press the key you want to redefine, then
prompts for the definition. If you leave the definition-editor
by choosing "EXIT" from the menu, KEYED will quit.
SCAN.o Is just a subroutine of KEYED. If you call SCAN.o, your calculator
waits until you press a key, then leaves a number on the stack
that represents QED's internal key encoding.
KDIFF Takes a key-list from the stack and the QED.keys variable from
your HOME directory.
Leaves a list on the stack that only contains the differences
between the two lists.
If you have made a program that uses QED, and you wish to spread
it to others, you should create a list that contains the
changes to be made to the key-list when using the program.
This lets other people enjoy their customization of the keyboard
as well as using your program.
KINST Takes a key-difference-list (as made by KDIFF) and the QED.keys
variable from your HOME directory.
Stores the changed list to a QED.keys variable in your ACTUAL
directory
KINST is ment to be the installation program for a QED key-list
used by a program from another guy. When you have transmitted
a directory containing the other's program, you may find a
key-difference-list in it. ReCaLl it on the stack, then execute
KINST and enjoy the other's tool with your standard key-assignment
still there.
VISIT is just a very simple example how to substitute the internal
slow-motion editor with QED at a special purpose.
Appendices
----------
A.0 Version History
-------------------
0.01 26-06-91 Only as a text-viewer and for test purposes.
0.02 Modified relocation routine
Added auto-quit
Added CursorMode
Added memory management to edit the text
Added "About" function
1.00a 03-07-91 First real editor, for alpha testers only
1.00b 05-07-91 Added a few functions like jumps
Removed some bugs
1.00c 08-07-91 Complete new key-interpretation, KEYED revision
Added some functions like jump-to-location, search...
Removed some bugs
1.01 11-07-91 Added new functions:
Search and replace ("!E...")
Optional return value ("!r0" - "!r9")
Optional menu-display (look startup-flags)
Alert Display instruction (had been available in 0.02
former)
Improved command key code reading routine (no longer
prompts when codes are already there...)
Removed a bug that caused funny text when unset marks
were jumped to
A further keyboard revision: Shifters are now treated
nearly like the Operating-System does it
Added a few utilities (KDIFF, KINST, VISIT - see chapter 3)
Improved the default key-list and the documentation
1.02 15-07-91 Removed a bug that caused funny text when scrolling left
in longer lines
Improved the "!r" function: Now you can leave real numbers
from 0 to 99. See key command code table
1.03 16-07-91 Removed a bug that caused a wrong exponent of the
return-value
1.04 27-07-91 Removed a bug that caused an "infinite result" error
when returning value 0 on the stack.
Added the left and right scroll-borders. (see QED.env)
Added the "!QT" instruction (see command key codes)
Improved the environment installation: An uncomplete
QED.env variable will no longer prevent QED from
running. Default environment is now built in.
1.05 11-08-91 Changed the variable recalling method: QED.font, QED.env
and QED.keys are now recalled by only their global name.
This has been done to make compression of these
variables using the "Redundance Fighter" possible.
(Use self-uncompressing model)
You can now also store a global name into one of
the three variables.
Changed the type of the QED.font variable: It is
now "Library Data" to make compression possible.
Added the "!CW", "!Cw", "!X<x>", "!Y" and "!y" commands -
please take a look at the command-key-code table
Added powerful macro-programming commands:
"!p" and "!P" (look command-key-code table)
A further minor keyboard revision: If you are already
in alpha-mode, and then press the alpha-key plus others,
they will still be interpreted as alpha-keys.
1.06 08-10-91 Rewrote the internal variable handling - the code
is no longer self-modifying, QED may now be placed
into protected RAM, ROM or libraries.
NOTICE: The PICT memory is used as variable
memory so you'll need to save the contents
of PICT before starting QED if neccessary.
If you want to put QED in a library, please
notice that you need to recompile programs
that should call QED, because the 48sx
distinguishes between "global names" and
"library names".
Removed a bug that caused QED to crash if it was called
as an on-stack-only-object.
Removed a dangerous routine that could have led to
problems in very seldom cases.
Reduced external memory requirements to 1688 bytes
Added another return-value option: last cursor position
can now be placed on the stack (See QED.env).
Improved error management slightly
Rechanged a feature of release 1.04: an incomplete
QED.env variable is no longer allowed. This led
only to problems.
Completed the 6*8 font. All characters included now.
1.07 09-11-91 Located a serious incompatibility to several libraries.
Since the demand for absolute adresses prohibited
other solutions, I made QED use the highest possible
PICT-adresses, and a check is made on startup, whether
QED can start in the actual configuration or not.
As far as I could test it, QED is now working with
any library on the market installed. If you get a
"insufficient memory" error though, please contact
me or use QED 1.05, wich was self-modifying...
A.1 Features to come in the future
----------------------------------
(in no order)
- macro record function within QED
- search backwards
- complete standard font, more fonts
B.0 Technical info
------------------
Assembler source code size: about 70kB, > 6000 lines
Main-program lenght : < 10kB
Memory usage : requieres about 1700 byte internal data memory,
a copy of the original string is held in
memory, the work-space and the clipboard
are sharing the memory left.
Graphic model : custom bit-plane, 1 hardware-screen used,
internal multi-font output routines,
second hardware-screen displayed optionally
Adress model : position independent, non self-modifying.
System & Hardware usage : operating system unused and blocked out.
direct hardware-access, no interrupts
Used development-utilities: CLASS 1.00, CLDIS 1.05, KERMIT'er
C.0 Thanks to...
----------------
I wish to say thanks to the following ones: (in alphabetical Order)
Bretting, Thomas for the access to the UseNet
Eberhardt, Thomas for a detailed description of the 1.06 "bug"
Ganske, Timm for inspiration and software-support
Heydecke, Jens for a cheap serial-cable to the 48sx
Hirner, Ulrich for an old but interesting book, a cheap 128kB RAM-Card
Kohl, Gilles for some suggestions and software-support
KRAFTWERK for the neccessary background-music
Reinke, Corinna for a soon version E replacement
Rohrdrommel, Michael for testing from Version 0.01 on...
Rudolph, Ralf for spreading my neverending postings...
Spell, Chris for the marvellous hp-mail-server@seq.uncwil.edu
Zuck, Daniel for installing the hp48_com FileEcho
... and everyone who sent me an offical registration.
D.0 Adress of the author
------------------------
Please send registration, any kind of feed-back, bug reports, suggestions,
hints, fonts, keymaps, HP48sx programs and so on to the following adress:
Lutz Vieweg
EMAIL : FidoNet 2:247/30.20
UseNet lv@muffel.hotb.sub.org
PHONE : 49-69-5601966
SnailMail: Eduard-Rueppell-Strasse 12
6000 Frankfurt am Main 1
GERMANY
Thanks.
If you are interested in other products from the author, especially
in the tools that were used to create QED, refer to the same adress.
+----------------------------------------------------------------------+
*** EMail to: lv@muffel.hotb.sub.org ***
*** FidoNet : 2:247/30.20 ***